/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ucb.ProjetoFinal.service;

import br.ucb.ProjetoFinal.domain.Empreendimento;
import br.ucb.ProjetoFinal.domain.EmpreendimentoPrefeitura;
import br.ucb.ProjetoFinal.domain.Municipio;
import br.ucb.ProjetoFinal.util.CrudService;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author DCBorges
 */
@Stateless
public class EmpreendimentoService {

    @EJB
    private CrudService crudService;

    //Empreendimento
    public void insertEmpreendimento(Empreendimento empreendimento) {
        this.crudService.create(empreendimento);
    }

    public void updateEmpreendimento(Empreendimento empreendimento) {
        this.crudService.update(empreendimento);
    }

    public void deleteEmpreendimento(long id) {
        this.crudService.delete(Empreendimento.class, id);
    }

    public Empreendimento getEmpreendimento(long id) {
        return this.crudService.find(Empreendimento.class, id);
    }

    public List<Empreendimento> getEmpreendimentos() {
        return this.crudService.findAll(Empreendimento.class);
    }
    //Municipio

    public void insertMunicipio(Municipio municipio) {
        this.crudService.create(municipio);
    }

    public void updateMunicipio(Municipio municipio) {
        this.crudService.update(municipio);
    }

    public void deleteMunicipio(long id) {
        this.crudService.delete(Municipio.class, id);
    }

    public Municipio getMunicipio(Integer id) {
        return this.crudService.find(Municipio.class, id);
    }

    public List<Municipio> getMunicipios() {
        return this.crudService.findAll(Municipio.class);
    }
    //Empreendimento-Prefeitura

    public void insertEmpreendimentoPrefeitura(EmpreendimentoPrefeitura empPref) {
        this.crudService.create(empPref);
    }

    public void updateEmpreendimentoPrefeitura(EmpreendimentoPrefeitura empPref) {
        this.crudService.update(empPref);
    }

    public void deleteEmpreendimentoPrefeitura(long id) {
        this.crudService.delete(EmpreendimentoPrefeitura.class, id);
    }

    public EmpreendimentoPrefeitura getEmpreendimentoPrefeitura(long id) {
        return this.crudService.find(EmpreendimentoPrefeitura.class, id);
    }

    public List<EmpreendimentoPrefeitura> getEmpreendimentoPrefeituras() {
        return this.crudService.findAll(EmpreendimentoPrefeitura.class);
    }
    
    public List<Empreendimento> getEmpreendimentos(Integer coApf, String noEmpreendimento, Integer nuLocalidadeL08) {
        Map<String, Object> args = new HashMap<String, Object>();
        StringBuilder query = new StringBuilder("select e from Empreendimento e where 1=1");
        if (coApf != 0) {
            query.append(" and e.coApf = :pCoApf");
            args.put("pCoApf", coApf);
        }
        if (noEmpreendimento != null && !noEmpreendimento.isEmpty()) {
            query.append(" and e.noEmpreendimento = :pNoEmpreendimento");
            args.put("pNoEmpreendimento", noEmpreendimento);
        }
        if (nuLocalidadeL08 != 0) {
            query.append(" and e.nuLocalidadeL08 = :pNuLocalidadeL08");
            args.put("pNuLocalidadeL08", nuLocalidadeL08);
        }
        return crudService.findWithCustomQuery(query.toString(), args);
    }
    
   public List<Empreendimento> detailEmpreendimento(Integer coApf) {
        Map<String, Object> args = new HashMap<String, Object>();
        args.put("pCoApf", coApf);
        return crudService.findWithNamedQuery("Empreendimento.findByCoApf", args);
    }
    
    public List<EmpreendimentoPrefeitura> detailVinculacoes(Integer coApf) {
        Map<String, Object> args = new HashMap<String, Object>();
        StringBuilder query = new StringBuilder("select ep from EmpreendimentoPrefeitura e where 1=1");
        if (coApf != 0) {
            query.append(" and e.coApf = :pCoApf");
            args.put("pCoApf", coApf);
        }
        return crudService.findWithCustomQuery(query.toString(), args);
    }
}
